Fix a thinko that leads to constantly reloading the mime data if a
authorMatthias Clasen <mclasen@redhat.com>
Thu, 20 Jul 2006 17:42:10 +0000 (17:42 +0000)
committerMatthias Clasen <matthiasc@src.gnome.org>
Thu, 20 Jul 2006 17:42:10 +0000 (17:42 +0000)
2006-07-20  Matthias Clasen  <mclasen@redhat.com>

Fix a thinko that leads to constantly reloading
the mime data if a mime.cache is present.  Patch
by Yevgen Muntyan, bugs.freedesktop.org #7495

* xdgmime.c (xdg_check_dir): Look for mime.cache first.
(xdg_check_file): Report existance of the file separately.

gtk/xdgmime/ChangeLog
gtk/xdgmime/xdgmime.c

index 5b25f9ff31826643ac131d1bc70454f56b010f56..9d21c3927386b6ea0b1adc444ead9b17fc34ff32 100644 (file)
@@ -1,3 +1,12 @@
+2006-07-20  Matthias Clasen  <mclasen@redhat.com>
+
+       Fix a thinko that leads to constantly reloading
+       the mime data if a mime.cache is present.  Patch
+       by Yevgen Muntyan, bugs.freedesktop.org #7495
+       
+       * xdgmime.c (xdg_check_dir): Look for mime.cache first.
+       (xdg_check_file): Report existance of the file separately.
+       
 2006-07-20  Matthias Clasen  <mclasen@redhat.com>
 
        * xdgmime.c (xdg_mime_shutdown): Unref the caches.
index 23be62b0405b147828351a07a551c7d029bbcf20..1d2007cb78a97dc70d93bf5337362baf151a60d3 100644 (file)
@@ -281,7 +281,8 @@ xdg_run_command_on_dirs (XdgDirectoryFunc  func,
  * FIXME: This doesn't protect against permission changes.
  */
 static int
-xdg_check_file (const char *file_path)
+xdg_check_file (const char *file_path,
+                int        *exists)
 {
   struct stat st;
 
@@ -290,6 +291,9 @@ xdg_check_file (const char *file_path)
     {
       XdgDirTimeList *list;
 
+      if (exists)
+        *exists = TRUE;
+
       for (list = dir_time_list; list; list = list->next)
        {
          if (! strcmp (list->directory_name, file_path) &&
@@ -306,6 +310,9 @@ xdg_check_file (const char *file_path)
       return TRUE;
     }
 
+  if (exists)
+    *exists = FALSE;
+
   return FALSE;
 }
 
@@ -313,26 +320,30 @@ static int
 xdg_check_dir (const char *directory,
               int        *invalid_dir_list)
 {
-  int invalid;
+  int invalid, exists;
   char *file_name;
 
   assert (directory != NULL);
 
-  /* Check the globs file */
-  file_name = malloc (strlen (directory) + strlen ("/mime/globs") + 1);
-  strcpy (file_name, directory); strcat (file_name, "/mime/globs");
-  invalid = xdg_check_file (file_name);
+  /* Check the mime.cache file */
+  file_name = malloc (strlen (directory) + strlen ("/mime/mime.cache") + 1);
+  strcpy (file_name, directory); strcat (file_name, "/mime/mime.cache");
+  invalid = xdg_check_file (file_name, &exists);
   free (file_name);
   if (invalid)
     {
       *invalid_dir_list = TRUE;
       return TRUE;
     }
+  else if (exists)
+    {
+      return FALSE;
+    }
 
-  /* Check the magic file */
-  file_name = malloc (strlen (directory) + strlen ("/mime/magic") + 1);
-  strcpy (file_name, directory); strcat (file_name, "/mime/magic");
-  invalid = xdg_check_file (file_name);
+  /* Check the globs file */
+  file_name = malloc (strlen (directory) + strlen ("/mime/globs") + 1);
+  strcpy (file_name, directory); strcat (file_name, "/mime/globs");
+  invalid = xdg_check_file (file_name, NULL);
   free (file_name);
   if (invalid)
     {
@@ -340,10 +351,10 @@ xdg_check_dir (const char *directory,
       return TRUE;
     }
 
-  /* Check the mime.cache file */
-  file_name = malloc (strlen (directory) + strlen ("/mime/mime.cache") + 1);
-  strcpy (file_name, directory); strcat (file_name, "/mime/mime.cache");
-  invalid = xdg_check_file (file_name);
+  /* Check the magic file */
+  file_name = malloc (strlen (directory) + strlen ("/mime/magic") + 1);
+  strcpy (file_name, directory); strcat (file_name, "/mime/magic");
+  invalid = xdg_check_file (file_name, NULL);
   free (file_name);
   if (invalid)
     {